package com.sisgesbyte.services.sistema;

import java.util.LinkedList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.AccesoMenuDetRequest;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.seguridad.MantenimientoAccesoMenuDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.seguridad.AccesoMenuEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.sistema.bean.AccesoMenuBean;
import com.sisgesbyte.services.sistema.bean.AccesoMenuListaResponse;

@Stateless
public class MantenimientoAccesoMenuImpl implements MantenimientoAccesoMenu {

	@EJB
	private MantenimientoAccesoMenuDao mantenimientoAccesoMenuDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public AccesoMenuListaResponse mostrarAccesoMenu(String codTransaccion,FiltrosSQLBean cadenaFiltros) {
		String mensajeTransaccionMetodo = "[mostrarAccesoMenu idTx=" + codTransaccion + "] - ";
		AccesoMenuListaResponse response = new AccesoMenuListaResponse();
		
		try{
			response.setIdTransaccion(codTransaccion);
			List<AccesoMenuEntity> daoAccesoMenu = null;
			try{
				daoAccesoMenu = mantenimientoAccesoMenuDao.listarAccesoMenu(cadenaFiltros);	
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al listar de BD " +e);
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMENU_COD_IDT50);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMENU_MSJ_IDT50);
				return response;
			}
			
			if(daoAccesoMenu.size() > 0){
				List<AccesoMenuBean> lista = new LinkedList<AccesoMenuBean>();
				for(AccesoMenuEntity row : daoAccesoMenu){
					AccesoMenuBean bean = new AccesoMenuBean();
					bean.setActive(row.getActive());
					bean.setId(row.getId());
					bean.setCodModulo(row.getCod_modulo());
					bean.setModulo(validaciones.validarCamposString(row.getModulo()));
					bean.setMenu(validaciones.validarCamposString(row.getMenu()));
					bean.setMenuId(row.getMenu_id());
					bean.setRol(validaciones.validarCamposString(row.getRol()));
					bean.setRolId(row.getRol_id());
					lista.add(bean);
				}
				
				response.setListarAccesoMenu(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMENU_COD_IDF49);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMENU_MSJ_IDF49);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMENU_COD_IDT50);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMENU_MSJ_IDT50);
			return response;
		}
			
		return response;
	}

	@Override
	public GenericResponse nuevoAccesoMenu(String codTransaccion, AccesoMenuBean accesoMenu) {
		String mensajeTransaccionMetodo = "[nuevoAccesoMenu idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity daoAccesoMenu = null;
			response.setIdTransaccion(codTransaccion);
			
			AccesoMenuDetRequest newAccesoMenu = new AccesoMenuDetRequest();
			newAccesoMenu.setActive(accesoMenu.getActive());
			newAccesoMenu.setCodMenu(accesoMenu.getMenuId());
			newAccesoMenu.setCodRol(accesoMenu.getRolId());
			try{
				daoAccesoMenu = mantenimientoAccesoMenuDao.guardarAccesoMenu(newAccesoMenu);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al guardar en BD " + e);
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMENU_COD_IDT51);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMENU_MSJ_IDT51);
				return response;
			}
			
			if(daoAccesoMenu.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMENU_COD_IDF50);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMENU_MSJ_IDF50);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMENU_COD_IDT51);
			response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMENU_MSJ_IDT51);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse editAccesoMenu(String codTransaccion, AccesoMenuBean accesoMenu) {
		String mensajeTransaccionMetodo = "[editAccesoMenu idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity daoAccesoMenu = null;
			response.setIdTransaccion(codTransaccion);
			
			AccesoMenuDetRequest editAccesoMenu = new AccesoMenuDetRequest();
			editAccesoMenu.setActive(accesoMenu.getActive());
			editAccesoMenu.setCodMenu(accesoMenu.getMenuId());
			editAccesoMenu.setCodRol(accesoMenu.getRolId());
			editAccesoMenu.setId(accesoMenu.getId());
			try{
				daoAccesoMenu = mantenimientoAccesoMenuDao.actualizarAccesoMenu(editAccesoMenu);
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al editar en BD " + e);
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOMENU_COD_IDT52);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOMENU_MSJ_IDT52);
				return response;
			}
			
			if(daoAccesoMenu.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOMENU_COD_IDF51);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOMENU_MSJ_IDF51);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOMENU_COD_IDT52);
			response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOMENU_MSJ_IDT52);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse deleteAccesoMenu(String codTransaccion, int codAccesoMenu) {
		String mensajeTransaccionMetodo = "[deleteAccesoMenu idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			response.setIdTransaccion(codTransaccion);
			GenericEntity daoAccesoMenu = mantenimientoAccesoMenuDao.eliminarAccesoMenu(codAccesoMenu);
			
			if(daoAccesoMenu.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ACCESOMENU_COD_IDF52);
				response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ACCESOMENU_MSJ_IDF52);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ACCESOMENU_COD_IDT53);
			response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ACCESOMENU_MSJ_IDT53);
			return response;
		}
		
		return response;
	}

}
